package com.hdax.mappers;

import com.hdax.entity.Employee;
import com.hdax.utils.ResultUtil;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 员工映射器
 *
 * @author Aizen
 * @date 2022/05/03
 */
@Repository
@Mapper
public interface EmployeeMapper {


    /**
     * 发现员工通过员工代码
     *
     * @param empCode emp代码
     * @return {@link Employee}
     */
    Employee findEmployeeByEmployeeCode(@Param("empCode") String empCode);



    /**
     * 得到数
     * 根据emp部门编号,获取总条数
     * 使用动态SQL,判断是不是员工就行
     * 员工加条件,其他查全部
     *
     * @param employee 员工
     * @return int
     */
    int getCount(@Param("Employee")Employee employee);

    /**
     * 发现通过登录
     * 登录验证
     *
     * @param employee 员工
     * @return {@link Employee}
     */
    Employee findByLogin(@Param("Employee")Employee employee);

    /**
     * 找到所有
     * 模糊查询
     * offset当前页码数
     * limit当前显示几条
     *
     * @param offset   抵消
     * @param limit    限制
     * @param employee 员工基本信息实体类
     * @return {@link List}<{@link Employee}>
     */
    List<Employee> findAll(@Param("offset")int offset, @Param("limit")int limit, @Param("employee") Employee employee);

    /**
     * 根据id获取该id的详细信息
     * @param empId
     * @return
     */
    Employee selectById(@Param("emp") int empId);

    /**
     * 得到名字数
     * 根据名称获取该名称的人数
     *
     * @param empName 名称
     * @return 返回数量
     */
    int getByNameCount(@Param("empName") String empName);

    /**
     * 根据ID删除用户
     * @param empId
     * @return
     */
    int deleteById(@Param("empId") int empId);

    /**
     * 添加用户
     * @param employee
     * @return
     */
    int insertById(@Param("Employee") Employee employee);

    /**
     * 修改用户
     * @param employee
     * @return
     */
    int updateById(Employee employee);

    /**
     * 查询所有的员工
     * @return
     */
    List<Employee> elist();

    /**
     * 添加员工
     * 添加员工(在添加员工档案的时候同步添加员工对应的账号信息
     *
     * @param employee 员工
     */
    void addEmployee(@Param("e") Employee employee);

    /**
     * 根据 员工详情的编号 更新 角色编号
     * @param roleId 角色编号
     * @param empId 员工详情的编号
     * @return 执行行数
     */
    Integer updateRoleIdByEmpId(@Param("roleId")Integer roleId,@Param("empId")Integer empId);

    /**
     * 编辑员工代码
     *
     * @param empCode emp代码
     * @param checked 检查
     */
    void editEmployeeOffByCode(@Param("empCode") String empCode,@Param("checked") String checked);

    /**
     * 更新信息
     *
     * @param employee 员工
     */
    void updateByInfo(Employee employee);

    void updateDepartmentIdByEmpId(Integer departmentId, Integer empId);
}
